থ্রেড হলো প্রোগ্রামের একটি সাব-ইউনিট, যা প্রোগ্রামের নির্দিষ্ট অংশকে স্বতন্ত্রভাবে এক্সিকিউট (run) করতে সক্ষম করে। C++11 থেকে থ্রেড ব্যবস্থাপনার জন্য thread
লাইব্রেরি যুক্ত করা হয়েছে, যা একই প্রোগ্রামের একাধিক অংশকে একসঙ্গে চালাতে দেয়। থ্রেড ব্যবহারের মাধ্যমে প্রোগ্রামের পারফরম্যান্স বৃদ্ধি করা যায়, কারণ এটি একাধিক কাজকে সমান্তরালভাবে (parallel) চালাতে সহায়ক।
C++ এ thread
লাইব্রেরি ব্যবহার করে থ্রেড তৈরি ও পরিচালনা করা হয়। একটি থ্রেড চালাতে একটি ফাংশন, মেম্বার ফাংশন, বা ল্যাম্বডা এক্সপ্রেশন দেওয়া যায়, যা থ্রেড চালানোর সময় পারফর্ম করবে।
cpp
Copy code
#include <iostream>
#include <thread>
using namespace std;
// একটি সাধারণ ফাংশন, যা থ্রেডের মাধ্যমে চালানো হবে
void printMessage() {
cout << "Hello from thread!" << endl;
}
int main() {
// একটি নতুন থ্রেড তৈরি করা এবং ফাংশন চালানো
thread t(printMessage);
// মূল থ্রেডে অন্য কাজ করা
cout << "Hello from main thread!" << endl;
// থ্রেড শেষ করা (join করা)
t.join();
return 0;
}
বর্ণনা:
printMessage
নামে একটি ফাংশন তৈরি করা হয়েছে, যা থ্রেডের মাধ্যমে চালানো হবে।thread t(printMessage);
লাইনের মাধ্যমে একটি থ্রেড তৈরি করে printMessage
ফাংশন চালানো হয়েছে।t.join();
ব্যবহার করে থ্রেড শেষ হওয়ার জন্য অপেক্ষা করা হয়েছে।join()
মেথড ব্যবহার করে মূল থ্রেড অন্য থ্রেড শেষ হওয়ার জন্য অপেক্ষা করে।detach()
মেথড ব্যবহার করে থ্রেডকে প্রধান থ্রেড থেকে আলাদা করে দেওয়া হয়, ফলে থ্রেড নিজে থেকেই কাজ সম্পন্ন করতে পারে।joinable()
মেথড ব্যবহার করে থ্রেড join
করা যায় কিনা তা পরীক্ষা করা যায়।#include <iostream>
#include <thread>
using namespace std;
void printMessage() {
cout << "Hello from detached thread!" << endl;
}
int main() {
thread t(printMessage);
// থ্রেড detach করা
t.detach();
// মূল থ্রেডে অন্য কাজ করা
cout << "Hello from main thread!" << endl;
return 0;
}
বর্ণনা:
detach()
মেথড ব্যবহার করে থ্রেডটি আলাদা করা হয়েছে, ফলে printMessage
ফাংশন থ্রেড নিজে থেকেই কাজ সম্পন্ন করবে এবং মূল থ্রেড আলাদাভাবে চলতে থাকবে।থ্রেডের মাধ্যমে ফাংশনে প্যারামিটার পাস করা সম্ভব। প্যারামিটার পাস করার সময় std::ref
ব্যবহার করে রেফারেন্স পাস করা যেতে পারে।
#include <iostream>
#include <thread>
using namespace std;
void add(int a, int b) {
cout << "Sum: " << a + b << endl;
}
int main() {
// প্যারামিটার সহ থ্রেড চালানো
thread t(add, 5, 10);
t.join();
return 0;
}
বর্ণনা:
add
ফাংশন দুটি ইনটিজার প্যারামিটার গ্রহণ করে।thread t(add, 5, 10);
এর মাধ্যমে add
ফাংশন ৫ এবং ১০ প্যারামিটার হিসেবে পেয়ে থ্রেডে চালিত হয়েছে।থ্রেড ব্যবস্থাপনায় কখনও কখনও বিভিন্ন থ্রেডের মধ্যে ডেটা সঠিকভাবে ব্যবহারের জন্য সিঙ্ক্রোনাইজেশন প্রয়োজন হয়। C++ এ মিউটেক্স (Mutex) ব্যবহার করে থ্রেড সিঙ্ক্রোনাইজেশন করা হয়, যাতে একাধিক থ্রেড একই ডেটা একসাথে মডিফাই করতে না পারে।
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx; // একটি মিউটেক্স তৈরি করা হয়েছে
void printMessage(const string& msg) {
mtx.lock(); // মিউটেক্স লক করা
cout << msg << endl;
mtx.unlock(); // মিউটেক্স আনলক করা
}
int main() {
thread t1(printMessage, "Hello from thread 1");
thread t2(printMessage, "Hello from thread 2");
t1.join();
t2.join();
return 0;
}
বর্ণনা:
mutex
তৈরি করা হয়েছে এবং mtx.lock()
ও mtx.unlock()
এর মাধ্যমে ডেটা অ্যাক্সেসের সময় লক করা হয়েছে, যাতে দুটি থ্রেড একই সময়ে একসাথে মেমোরি অ্যাক্সেস না করতে পারে।join
বা detach
না করলে থ্রেড সম্পন্ন না হওয়ার ঝুঁকি থাকে, যা মেমোরি লিক হতে পারে।thread
লাইব্রেরির মাধ্যমে থ্রেড ব্যবস্থাপনা করা যায় এবং join
, detach
মেথড ব্যবহার করে থ্রেড পরিচালনা করা যায়।থ্রেড ব্যবহারে প্রোগ্রামিং আরও কার্যকর এবং সময়সাশ্রয়ী হয়, তবে সঠিক ব্যবস্থাপনা নিশ্চিত করা জরুরি।
common.read_more